package com.water_work_form.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.water_work_form.entity.RecordDrugTest;
import com.water_work_form.entity.RecordStorageDrugTest;
import com.water_work_form.result.Result;
import com.water_work_form.result.ResultCodeEnum;
import com.water_work_form.result.ResultUtil;
import com.water_work_form.service.RecordDrugTestService;
import com.water_work_form.service.RecordStorageDrugTestService;
import com.water_work_form.util.RandomIdUtil;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 记录——储药池药剂检测记录 前端控制器
 * </p>
 *
 * @author xuke
 * @since 2023-08-17
 */
@RestController
@RequestMapping("/record-storage-drug-test")
public class RecordStorageDrugTestController {

    @Autowired
    RecordStorageDrugTestService recordStorageDrugTestService;

    @Autowired
    RecordDrugTestService recordDrugTestService;

    /**
     * 记录——储药池药剂检测记录 项目新增
     * @param recordStorageDrugTest 新数据
     * @return 返回对应code 0为成功
     */
    @ApiOperation("新增")
    @PostMapping("/add")
    public Result addRecordStorageDrugTest(@RequestBody RecordStorageDrugTest recordStorageDrugTest){
        recordStorageDrugTest.setId(RandomIdUtil.createRandomId());
        recordStorageDrugTestService.save(recordStorageDrugTest);
        return ResultUtil.success(ResultCodeEnum.SUCCESS, recordStorageDrugTest);
    }

    /**
     * 记录——储药池药剂检测记录 查询（三个查询项+分页）
     * @param type 项目类型（type）
     * @param status 项目状态（status）
     * @param startSampleDate 取样日期（sample_date）范围查询开始时间
     * @param endSampleDate 取样日期（sample_date）范围查询结束时间
     * @param current 分页查看 当前页数
     * @param size 分页查看 一页最大数据量
     * @return 返回符合上述条件的数据
     */
    @ApiOperation("查看(分页)")
    @GetMapping("/pageList")
    public Result listRecordStorageDrugTest(@RequestParam("type") String type, @RequestParam("status") String status, @RequestParam("startSampleDate") String startSampleDate,
                                            @RequestParam("endSampleDate") String endSampleDate, @RequestParam("current") Integer current, @RequestParam("size") Integer size){
        if(type == null){
            return ResultUtil.error(ResultCodeEnum.NOT_FOUND);
        }
        IPage<RecordStorageDrugTest> page = recordStorageDrugTestService.selectRecordStorageDrugTest(type, current, status, startSampleDate, endSampleDate, size);
        return ResultUtil.success(ResultCodeEnum.SUCCESS, page);
    }

    /**
     * 记录——储药池药剂检测记录 项目删除
     * @param id 所需删除的数据id
     * @return 返回对应code 0为成功
     */
    @ApiOperation("删除")
    @DeleteMapping("/delete")
    public Result deleteRecordStorageDrugTest(@RequestParam("id") Long id){
        recordStorageDrugTestService.removeById(id);
        return ResultUtil.success(ResultCodeEnum.SUCCESS);
    }

    /**
     * 记录——储药池药剂检测记录 项目更新
     * @param recordStorageDrugTest 数据更新的项目
     * @return 返回对应code 0为成功
     */
    @ApiOperation("更新")
    @PostMapping("/update")
    public Result updateRecordStorageDrugTest(@RequestBody RecordStorageDrugTest recordStorageDrugTest){
        recordStorageDrugTestService.updateById(recordStorageDrugTest);
        return ResultUtil.success(ResultCodeEnum.SUCCESS);
    }

    /**
     * 记录——储药池药剂检测记录 基础表数据查询
     * @param type 项目类型
     * @param name form基础表（name）
     * @return 返回符合上述查询条件的数据
     */
    @ApiOperation("基础表数据查询")
    @GetMapping("/basicList")
    public Result listBasicStorageDrugTest(@RequestParam("type") String type, @RequestParam("name") String name){
        Map<String,Object> map = recordDrugTestService.selectBasicDrugTest(type, name);
        return ResultUtil.success(ResultCodeEnum.SUCCESS, map);
    }

    /**
     * 记录——储药池药剂检测记录 全部数据导出
     * @param recordStorageDrugTestList 需要导出的数据列表
     * @return 返回相应数据
     * @throws IOException 异常
     */
    @ApiOperation("列表导出")
    @PostMapping(value = "/download-word")
    public Result downloadWordRecordStorageDrugTest(@RequestBody List<RecordStorageDrugTest> recordStorageDrugTestList, @RequestParam("restriction") String restrictionString, @RequestParam("formulaContent") String formulaContentString,
                                             @RequestParam("formulaDescription") String formulaDescriptionString, @RequestParam("medical") String medicalString) throws IOException  {
        recordStorageDrugTestService.downloadRecordStorageDrugTest(recordStorageDrugTestList, restrictionString, formulaContentString, formulaDescriptionString, medicalString);
        return ResultUtil.success(ResultCodeEnum.SUCCESS);
    }


}

